package com.lsh.controller;

import com.lsh.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

/**
 * @author ：LiuShihao
 * @date ：Created in 2020/11/6 9:45 上午
 * @desc ：
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    RestTemplate restTemplate;

    @Qualifier("userServiceImpl")
    @Autowired
    UserService userService;

    @GetMapping("/callDept")
    public String callDept(){
        String msg = "访问Dept服务";
        System.out.println(msg);
        return userService.callDept();
    }
    @GetMapping("/callDeptById1")
    public String callDeptById1(String id){
        String msg = "GET请求   表单形式";
        System.out.println(msg);
        return userService.callDeptAndParam(id);
    }
    @GetMapping("/callDeptById2/{id}")
    public String callDeptById2(@PathVariable("id") String id){
        String msg = "Get  路径带参";
        System.out.println(msg);
        return userService.callDeptAndParam2(id);
    }

    @PostMapping
    public String callDeptPost(@RequestBody Map<String,String> map){
        String msg = "POST  JSON";
        System.out.println(msg);
        return userService.callDeptPost(map);
    }



    /**
     *  getForObject(String url,Object.class);   get方式访问url指定的微服务,Object.class 返回的数据类型
     *  getForEntry(String url,Object.class)
     *  getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables)  这三个参数分别代表 REST请求地址、HTTP响应转换被转换成的对象类型、请求参数
     *  postForObject(String url,Object.class)
     *  postForEntry(String url,Object.class)
     */

//    @GetMapping("/callDept")
//    public Object callDept(){
//        String msg = "访问Dept服务";
//          return restTemplate.getForObject("http://DEPT/dept/called",String.class);
//    }

//    @GetMapping("/callDeptAndParam")
//    public String callDeptAndParam(){
//        String msg = "访问Dept服务  带参数";
//        HashMap<String, String> map = new HashMap<>();
//        map.put("id","1");
//        String forObject = restTemplate.getForObject("http://localhost:8002/dept/called/{id}", String.class, map);
//        System.out.println("forObject:"+forObject);
//        return forObject;
//    }
//
//    @PostMapping("/CallDeptPost")
//    public String userCallDeptPost () {
//        /**
//         * url : 要调用的其他服务端的地址
//         * responseType : 被调用服务的方法的返回数据类型
//         */
//        Map<String,String> map = new HashMap<>();
//        map.put("id","2");
//        map.put("name","招生部");
//        /**
//         * uri : 其他微服务地址
//         * request : 请求中的数据
//         * responseType :响应回的数据类型
//         * @ return : ResponseEntity --> 所有响应数据
//         *      响应消息头
//         *      响应消息行
//         *      响应正文  --> 有dept返回的ResultObject数据
//         */
//        ResponseEntity<String> stringResponseEntity = restTemplate.postForEntity("http://localhost:8002/dept/beCalledPost", map, String.class);
//        // getBody 获取其中的响应正文
//        String body = stringResponseEntity.getBody();
//        return body;
//    }



    //           return getJson("http://DEPT/dept/called",msg,Object.class);


//    public <T> ResponseEntity<T> getJson(String url, String requestJson, Class<T> responseType) {
//        HttpHeaders headers = new HttpHeaders();
//        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
//
//        //设置接收返回值的格式为json
//        List<MediaType> mediaTypeList = new ArrayList<>();
//        mediaTypeList.add(MediaType.APPLICATION_JSON_UTF8);
//        headers.setAccept(mediaTypeList);
//
//        HttpEntity<String> entity = new HttpEntity<>(requestJson, headers);
//
//        ResponseEntity<T> responseEntity;
//
//        System.out.println(requestJson);
//
//        responseEntity = restTemplate.exchange(url, HttpMethod.GET, entity, responseType);
//
//        return responseEntity;
//    }
//    public <T> ResponseEntity<T> postJson(String url, String requestJson, Class<T> responseType) {
//
//        HttpHeaders headers = new HttpHeaders();
//        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
//
//        //设置接收返回值的格式为json
//        List<MediaType> mediaTypeList = new ArrayList<>();
//        mediaTypeList.add(MediaType.APPLICATION_JSON_UTF8);
//        headers.setAccept(mediaTypeList);
//
//        HttpEntity<String> entity = new HttpEntity<>(requestJson, headers);
//
//        ResponseEntity<T> responseEntity;
//
//        System.out.println(requestJson);
//
//        responseEntity = restTemplate.exchange(url, HttpMethod.POST, entity, responseType);
//
//        return responseEntity;
//    }
}
